import uView from "./uview/uView.js"
export default{
	/* 获取父组件信息 */
	getParentData(parentName = "" , _this) {
		let parent = {}
		// 这里的本质原理是，通过获取父组件实例(也即类似u-radio的父组件u-radio-group的this)
		// 将父组件this中对应的参数，赋值给本组件(u-radio的this)的parentData对象中对应的属性
		// 之所以需要这么做，是因为所有端中，头条小程序不支持通过this.parent.xxx去监听父组件参数的变化
		// 此处并不会自动更新子组件的数据，而是依赖父组件u-radio-group去监听data的变化，手动调用更新子组件的方法去重新获取
		parent = uView.$parent.call(_this, parentName)
		if (parent.children) {
			// 如果父组件的children不存在本组件的实例，才将本实例添加到父组件的children中
			parent.children.indexOf(_this) === -1 && parent.children.push(_this)
		}
		return parent
	},
	
	/* 获取当前组件宽度 */
	getComponentWidth(componentId = "" , componentIdRef = "" , _this) {
		// 延时一定时间，以确保节点渲染完成
		return new Promise(resolve => {
			// uView封装的获取节点的方法，详见文档
			// #ifndef APP-NVUE
			let query = uni.createSelectorQuery().in(_this);
			query.select('#' + componentId).boundingClientRect(res => {
				resolve(res.width)
			}).exec();
			// #endif
			// #ifdef APP-NVUE
			// nvue的dom模块 用于获取节点
			dom.getComponentRect(_this.$refs[componentIdRef], (res) => {
				resolve(res.size.width)
			})
			// #endif
		})
	},
}